/*
  typescript 中的数据类型
    typescript中为了使编写的代码更规范，更有利于维护， 增加了类型校验

    布尔类型 (boolean)
    数字类型(number)
    字符串类型(string)
    数组类型(array)
    元组类型(tuple)
    枚举类型(enum)
    任意类型(any)
    null 和 undefined
    void类型
    never类型
*/

// 1.boolean 类型
// let a:number = 10
// console.log(a)

// 2.字符串类型
// let a:string = 'aaa'
// console.log(a)

// 3.数组类型
// 3.1
// let a:number[] = [1, 2, 3, 4]
// let b:string[] = ['blue', 'pink']

// // 3.2
// let c:Array<number> = [1, 2, 3, 5]
// let d:Array<string> = ['1', '2', '3']

// 3.3
// let arr: any[] = [1, 2, 34, 5]
// console.log(arr)

// 4.元组类型(tuple) 属于数组的一种
// let arr:[string, number, boolean] = ["ts", 3.18, false]
// console.log(arr)

/*
  5.枚举类型 (enum)
  随着计算机的不断普及，程序不仅只用于数值计算，还更广泛地用于处理非数值地数据。
  例如：性别、月份、星期几、颜色、单位名、学历、职务等，都不是数值数据。
  在其它程序设计语言中，一般用一个数值来代表某一状态，这种处理方法不直观，易读性
  差。如果能在程序中用自然语言中相应含义的单词来代替某一状态，则程序就容易阅读和理解。
  也就是说，事先考虑到某一变量可能取的值，尽量用自然语中含义清楚的单词来表示它的每一
  个值，这中方法称为枚举方法，用这种方法定义的类型称为枚举型。

  enum 枚举名 {
    标识符[=整型常数],
    标识符[=整型常数],
    ...
    标识符[=整型常数]
  }

  eg:
    pay_status 0 未支付 1 支付 2 交易成功
    flag 1表示true -1 表示false
*/

// enum Flag {
//   success = 1,
//   error = -1
// }
// let f: Flag = Flag.success
// console.log(f)

// enum Color {
//   red,
//   blue = 5,
//   orange
// }
// let a: Color = Color.red
// let b: Color = Color.blue
// let c: Color = Color.orange
// console.log(a, b, c)// 0 5 6 这里red 为 0 orange在blue的基础上加1

// enum Num {
//   a,
//   b,
//   c
// }
// let a: Num = Num.a
// let b: Num = Num.b
// let c: Num = Num.c
// console.log(a, b, c) // 0 1 2 这里不赋值的话默认输出的是索引值

// 对象类型
// let a: object = {
//   name: 'wuchao',
//   age: 26
// }
// console.log(a)

// 6. null 和 undefined 其他(never类型) 数据类型的子类型

// let num: number
// console.log(num) // 输出：undefined 报错

// let num: undefined
// console.log(num) // 输出：undefined 正确

// 一个元素可能是 number类型 可能是null 可能是undefined

// let num: number | null | undefined
// console.log(num)

// 7. void类型：typescript中的void表示没有任何类型，一般用于定义方法的时候方法没有返回值。
// function run(): void {
//   console.log('run')
// }
// run()

// 8. never类型：是其他类型 (包括null 和 undefined) 的子类型，代表从不会出现的值。
// 这意味着声明never的变量只能被never类型所赋值
// let a: never


// a = undefined
// console.log(a) // 打印undefined 报错

// a = (() => {
//   throw new Error('错误')
// })()
// console.log(a)
